#include <stdbool.h>
#include "module_heater_port.h"
#include "user_board.h"
#include <rtthread.h>
#include <rtdevice.h>
#include "module_heater.h"
/*******************************************
 * 功能：底层硬件初始化
 * 参数：void
 * 返回值：void
 * ****************************************/
void heat_port_init(void)   
{
    board_user_init();
}

/*******************************************
 * 功能：获取实时tick
 * 参数：void
 * 返回值：tick是当前tick时钟
 * ****************************************/
uint32_t heat_port_get_tick(void)
{
    rt_tick_t tick = rt_tick_get();
    return tick;
}

/*******************************************
 * 功能：获取当前加热片数量
 * 参数：void
 * 返回值：当前数量
 * ****************************************/
uint16_t heat_port_get_max_ch(void)
{
    return board_heater_ch_max();
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：获取实时加热片ad对应电压值
 * 参数：ch-顺序通道    value-获取到的电压值
 * 返回值：返回执行结果
 * ****************************************/
int heat_port_get_rt_value_mv(int8_t ch, int16_t *value_mv)
{
    int ret = 0;
    *value_mv = board_heater_ch_get_ntc_vol(ch);
    return ret;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：根据输入电压，判断当前加热片连接状态
 * 参数：ch-通道    rt_voltage-输入电压
 * 返回值：连接状态
 * ****************************************/
enum HEATER_WORK_ERROR heat_port_get_heater_link(uint8_t ch, int16_t rt_voltage_mv)
{
    uint8_t link_status  = board_heater_ntc_check_valid(ch, rt_voltage_mv);
    if(link_status == true)
        return HEATER_WORK_ERROR_OK;
    else
        return HEATER_WORK_ERROR_INVALID_NTC;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：温度转换为电压
 * 参数：ch-通道    temp-温度   voltage-转换后的电压
 * 返回值：执行结果
 * ****************************************/
int heat_port_switch_temp_to_voltage(int8_t ch, int16_t temp, int16_t *voltage_mv)
{
    int ret = 0;
    board_heater_get_vol_from_temp(ch, temp, (uint32_t *)voltage_mv);
    return ret;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：电压转换为温度
 * 参数：ch-通道    voltage-电压    temp-转换后的温度
 * 返回值：执行结果
 * ****************************************/
int heat_port_switch_voltage_to_temp(int8_t ch, int16_t voltage_mv, int16_t *temp)
{
    int ret = 0;
    board_heater_get_temp_from_vol(ch, voltage_mv, temp);
    return ret;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：获取加热差值，当大于该值，状态机重新进入加热状态
 * 参数：ch-通道    step_mv-步进值
 * 返回值：执行结果
 * ****************************************/
int heat_port_get_step_vol(uint8_t ch, int16_t *step_mv) //差值
{
    int ret = 0;
    *step_mv = 30;
    return ret;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：加热总开关
 * 参数：ch-通道    en-开关命令
 * 返回值：执行结果
 * ****************************************/
int heat_port_set_key(int8_t ch, bool en)
{
    board_heater_ch_set_en(ch, en);
    return 0;
}

/*******************************************
 * 使用者在使用本模块时，需要先对自己用到的加热片进行排序，ch为序号：0~n
 * 功能：设置占空比
 * 参数：ch-通道    percent-占空比
 * 返回值：执行结果
 * ****************************************/
int heat_port_set_percent(int8_t ch, int8_t percent)
{
    board_heater_ch_set_duty_cycle(ch, percent);
    // call low interface;
    return 0;
}

